package com.xinggq.user.service.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 审计日志实体类
 *
 * @author system
 * @since 2025/1/10
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_audit_log")
public class SysAuditLogEntity {

    /**
     * 日志ID，使用分布式ID生成器
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 租户ID
     */
    private Long tenantId;

    /**
     * 操作用户ID
     */
    private Long userId;

    /**
     * 操作用户名
     */
    private String username;

    /**
     * 操作人真实姓名
     */
    private String realName;

    /**
     * 操作类型：LOGIN-登录，LOGOUT-退出，CREATE-创建，UPDATE-更新，DELETE-删除
     */
    private String operation;

    /**
     * 操作描述
     */
    private String operationDesc;

    /**
     * 操作资源
     */
    private String resource;

    /**
     * 资源ID
     */
    private String resourceId;

    /**
     * 功能模块
     */
    private String module;

    /**
     * 请求方法：GET，POST，PUT，DELETE
     */
    private String method;

    /**
     * 请求URL
     */
    private String requestUrl;

    /**
     * 请求参数
     */
    private String requestParams;

    /**
     * 响应结果
     */
    private String responseResult;

    /**
     * IP地址
     */
    private String ipAddress;

    /**
     * 用户代理
     */
    private String userAgent;

    /**
     * 浏览器
     */
    private String browser;

    /**
     * 操作系统
     */
    private String os;

    /**
     * 执行时间(毫秒)
     */
    private Integer executionTime;

    /**
     * 操作状态：1-成功，0-失败
     */
    private Integer status;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 设置日志信息
     */
    public void setLogInfo() {
        this.createdAt = LocalDateTime.now();
        if (this.status == null) {
            this.status = 1; // 默认成功状态
        }
    }

    /**
     * 检查操作是否成功
     */
    public boolean isSuccess() {
        return this.status != null && this.status == 1;
    }
}